iT邦幫忙

2023 iThome 鐵人賽

DAY 19
0
AI & Data

用R語言玩轉文字探勘系列 第 19

[Day 19] 利用R語言找詞彙關係 - correlation

  • 分享至 

  • xImage
  •  

詞彙關係 - correlation

上面的 bigram 很好懂,它的特點就是簡單且直觀,只要考慮相鄰的詞的關係,而且還能夠保留有順序性的資訊,計算效率也高,只要順著文序、看相臨的詞一次就好,而且只要看結果,就能夠解釋意義。

不過,它的好懂優點,也能視為缺點,因為它會損失大量資訊,例如不是相鄰的詞彙就抓不到,可是我們常常會在講話中插入一些幫忙的詞、習慣用語,例如「肚子餓」和「肚子很餓」以及「肚子超餓」就會被視為不同的
bigram,關鍵意義其實還是「肚子餓」,但 bigram 無法捕捉到,稍微複雜一些的詞彙關係全部都會流失。

如果你學過統計,一定聽過相關(correlation),這個指標也能拿來看詞彙之間的關係。它能夠不只是評估相鄰的詞,改成看整份文章、整個章節、整個段落,而且穩健程度(robustness)更高,就算你在用詞中加入更多變化,它還是可以捕捉到肚子餓,因為他看的不是相鄰的詞,而是同一個單位(文章、章節、段落、句子)當中是否有共同出現的詞彙,所以更穩定,再加上他的統計特性,有其他變化可以處理。

當然,有得必有失,在計算上要花更多時間,你可以想像當詞彙數量上升,它的計算複雜度不像 bigram 的線性,而是以平方成長。此外,決定單位也是一個重點,要選哪一個單位來衡量、要用什麼樣的標準當成相關性門檻(threshold)都是重點,而且如果共同出現次數低、但相關性高,這種結果也有可能誤導人,所以這是門艱深的學問。

不過,它的程式碼相對簡單,已經有專門套件專門處理。

### text part
df_speech_seg

## # A tibble: 27,125 × 7
##       id title                                date       president text_segment text_POS text                                                             
##    <dbl> <chr>                                <date>     <chr>     <chr>        <chr>    <chr>                                                            
##  1     1 總統蒞臨中華民國八十六年國慶大會致詞 1997-10-15 李登輝    大會         n        大會主席、各位貴賓、各位親愛的父老兄弟姐妹:今天是中華民國八十六…
##  2     1 總統蒞臨中華民國八十六年國慶大會致詞 1997-10-15 李登輝    主席         n        大會主席、各位貴賓、各位親愛的父老兄弟姐妹:今天是中華民國八十六…
##  3     1 總統蒞臨中華民國八十六年國慶大會致詞 1997-10-15 李登輝    貴賓         ns       大會主席、各位貴賓、各位親愛的父老兄弟姐妹:今天是中華民國八十六…
##  4     1 總統蒞臨中華民國八十六年國慶大會致詞 1997-10-15 李登輝    親愛         a        大會主席、各位貴賓、各位親愛的父老兄弟姐妹:今天是中華民國八十六…
##  5     1 總統蒞臨中華民國八十六年國慶大會致詞 1997-10-15 李登輝    父老兄弟     n        大會主席、各位貴賓、各位親愛的父老兄弟姐妹:今天是中華民國八十六…
##  6     1 總統蒞臨中華民國八十六年國慶大會致詞 1997-10-15 李登輝    姐妹         n        大會主席、各位貴賓、各位親愛的父老兄弟姐妹:今天是中華民國八十六…
##  7     1 總統蒞臨中華民國八十六年國慶大會致詞 1997-10-15 李登輝    今天         t        大會主席、各位貴賓、各位親愛的父老兄弟姐妹:今天是中華民國八十六…
##  8     1 總統蒞臨中華民國八十六年國慶大會致詞 1997-10-15 李登輝    中華民國     n        大會主席、各位貴賓、各位親愛的父老兄弟姐妹:今天是中華民國八十六…
##  9     1 總統蒞臨中華民國八十六年國慶大會致詞 1997-10-15 李登輝    八十六年     m        大會主席、各位貴賓、各位親愛的父老兄弟姐妹:今天是中華民國八十六…
## 10     1 總統蒞臨中華民國八十六年國慶大會致詞 1997-10-15 李登輝    國慶日       t        大會主席、各位貴賓、各位親愛的父老兄弟姐妹:今天是中華民國八十六…
## # ℹ 27,115 more rows

我們載入特別開發的套件wider

library(widyr)

先計算co-occuring word pair,也就是詞彙組的概念,以演講稿為單位,也就是以年份為單位,看他們成對出現的關係。

# count words co-occuring within year
word_pairs <- df_speech_seg %>%
  pairwise_count(text_segment, id, sort = TRUE)

word_pairs

## # A tibble: 9,799,326 × 3
##    item1    item2        n
##    <chr>    <chr>    <dbl>
##  1 中華民國 今天        24
##  2 國家     今天        24
##  3 民主     今天        24
##  4 社會     今天        24
##  5 發展     今天        24
##  6 推動     今天        24
##  7 國際     今天        24
##  8 今天     中華民國    24
##  9 國家     中華民國    24
## 10 民主     中華民國    24
## # ℹ 9,799,316 more rows

接著計算co-occuring word pair relations,也就是詞彙共現的概念,以演講稿為單位,也就是以年份為單位,看他們成對出現的關係。

### 計算 correlation
word_cors <- df_speech_seg %>%
  group_by(text_segment) %>%
  filter(n() >= 20) %>%
  pairwise_cor(text_segment, id, sort = TRUE)

word_cors %>% head(200) %>% filter(row_number()%%2 == 0) %>% sample_n(20)

## # A tibble: 20 × 3
##    item1 item2  correlation
##    <chr> <chr>        <dbl>
##  1 超過  重要         0.669
##  2 今年  後           0.747
##  3 投資  進行         0.747
##  4 兩千  三百萬       0.698
##  5 經濟  臺灣         1    
##  6 總統  去年         0.707
##  7 好    院長         0.713
##  8 年    總統         0.730
##  9 現在  日本         0.753
## 10 副    閣下         0.828
## 11 市場  做           0.678
## 12 政府  最           0.692
## 13 協定  架構         0.759
## 14 協定  閣下         0.798
## 15 最    政府         0.692
## 16 國人  應該         0.745
## 17 超過  地區         0.713
## 18 閣下  協定         0.798
## 19 大會  主席         0.730
## 20 好    所有         0.713

word_cors %>% head(200) %>% filter(row_number()%%2 == 0) %>% sample_n(20)

## # A tibble: 20 × 3
##    item1 item2 correlation
##    <chr> <chr>       <dbl>
##  1 成果  正在        0.713
##  2 以來  穩定        0.683
##  3 化    價值        0.676
##  4 重要  超過        0.669
##  5 協定  架構        0.759
##  6 政治  問題        0.698
##  7 人    超過        0.745
##  8 展現  強化        0.737
##  9 重要  地區        0.678
## 10 協定  臺          0.828
## 11 協定  副          0.828
## 12 年    總統        0.730
## 13 歷史  臺灣        0.692
## 14 市場  做          0.678
## 15 臺    副          0.822
## 16 經濟  臺灣        1    
## 17 協議  鄉親        0.799
## 18 這是  美國        0.707
## 19 臺    大陸        0.775
## 20 許多  環境        0.697

word_cors %>% head(200) %>% filter(row_number()%%2 == 0) %>% sample_n(20)

## # A tibble: 20 × 3
##    item1 item2 correlation
##    <chr> <chr>       <dbl>
##  1 日本  應該        0.713
##  2 副    閣下        0.828
##  3 協定  臺          0.828
##  4 協定  九二        0.698
##  5 經濟  臺灣        1    
##  6 增加  應該        0.669
##  7 閣下  協定        0.798
##  8 整合  進步        0.676
##  9 前    現在        0.676
## 10 日本  副          0.669
## 11 和平  合作        0.692
## 12 受到  捍衛        0.749
## 13 創造  目前        0.698
## 14 新    基礎        0.692
## 15 萬    服務        0.698
## 16 人    超過        0.745
## 17 未來  政府        1    
## 18 時    超過        0.713
## 19 原則  已          0.713
## 20 美國  日本        0.920

上一篇
[Day 18] 利用R語言找詞彙關係 - bigram篇
下一篇
[Day 20] 利用R語言分析情感
系列文
用R語言玩轉文字探勘30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言